

/*
1、接口继承和实现继承不同。在public继承之下,derived classes 总是继承 base class的接口。
2、pure virtual函数只具体指定接口继承。
3、impure virtual函数具体指定接口继承及缺省实现继承。
4、non-virtual函数具体指定接口继承以及强制性实现继承。
*/

#include <iostream>


//飞机和飞机场的例子

class AirPort
{
    public:

    
};



class AirPlane
{
    public:
        virtual ~AirPlane(){};
        virtual void fly(const AirPort &place) = 0;//纯虚函数，表示每个飞机需要自己确定要飞去哪儿，这里属于接口继承
        virtual void stop(){};//impure function  提供缺省实现，不同飞机可以重写实现，这里属于接口继承或者实现继承
        void record(){};//non virtual 强制实现，这里属于实现继承
    protected:
        void defualtfly(){}; //缺省实现和接口分开
    private:
};

class ModelA:public AirPlane
{
    public:
        virtual void fly(const AirPort &place){};
    private:
};

class ModelB:public AirPlane
{
    public:
        virtual void fly(const AirPort &place){AirPlane::defualtfly();};//调用缺省实现
    private:
};

class ModelC:public AirPlane
{
    public:
        virtual void fly(const AirPort &place){"需要自己指定位置";};
    private:
};


int main(int argc, char const *argv[])
{
    
    
    return 0;
}
